import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";

// 定义一个路径解析辅助函数
const resolvePath = (relativePath) => path.resolve(__dirname, relativePath);
// 获取当前环境
const isDev = process.env.NODE_ENV !== "production";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  // 项目根目录，默认是配置文件所在目录，根据需要可自定义
  root: resolvePath("./"),
  // 应用的基路径，影响资源和路由的基准URL
  base: isDev ? "/" : "./",
  // 静态资源目录，存放不会通过 Vite 转换的静态资源
  publicDir: "public",
  // 环境变量前缀，确保安全性和避免冲突
  envPrefix: "VITE_",

  // 定义全局常量，用于环境变量注入或其他编译时替换
  define: {
    __APP_VERSION__: JSON.stringify(process.env.npm_package_version),
    "process.env": process.env,
  },
  optimizeDeps: {
    include: [
      'brace',
    ],
    exclude: [],
  },

  // 配置模块解析规则，如别名，简化导入路径
  resolve: {
    alias: [{ find: "@", replacement: resolvePath("src") },
           { find: "vue-i18n", replacement: "vue-i18n/dist/vue-i18n.cjs.js" }
          //  ,{ find: /\@opentiny\/vue-theme\/(?!(smb))/, replacement: '@opentiny/vue-theme/smb-theme/' }
    ],
    extensions: [".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],
  },

  build: {
    // 输出目录，构建产物将存放在此目录下，默认为'dist'
    outDir: "dist",

    // 构建前是否清空输出目录，默认为true
    emptyOutDir: true,

    // 指定构建目标的ECMAScript版本，影响代码的转译程度，默认为'es2020'
    target: "es2020",

    // 构建时是否进行代码压缩，默认为true
    minify: true,

    // 当拆分的chunk大小超过此限制（单位：KB）时发出警告，默认为500KB
    chunkSizeWarningLimit: 500,

    // 构建后是否报告压缩后的文件大小，默认为true
    reportCompressedSize: true,

    // 传递给Rollup的额外配置选项
    rollupOptions: {
      // 输入配置，可以定义多个入口点
      input: {
        main: "src/main.js", // 例如，主入口文件
        alternative: "src/alternative-entry.js", // 另一个入口文件
      },
      // 输出配置，可以自定义输出格式、文件名等
      output: {
        // 例如，修改输出文件名
        entryFileNames: "[name].[hash].js",
      },
    },

    // 服务器端渲染相关配置
    ssr: {
      // SSR相关选项
    },

    // 小于该大小（单位：字节）的资源会被内联到bundle中，默认为4096字节
    assetsInlineLimit: 4096,

    // 指定CSS构建的目标浏览器支持等级，独立于'target'配置
    cssTarget: "defaults",

    // 是否为模块preload/prefetch添加polyfill，默认为true
    polyfillModulePreload: true,

    // 配置如何处理CommonJS模块
    commonjsOptions: {
      // 例如，是否将混合模块转换为ESM
      transformMixedEsModules: true,
    },

    // 是否在构建时生成manifest文件，默认为true
    writeManifest: true,
  },
  server: {
    // 更改服务器监听的主机名，使其在局域网内可访问
    host: "0.0.0.0",
    // 修改开发服务器的端口号
    port: 8081,
    // 是否在服务器启动时自动打开浏览器
    open: false,
    // 启用HTTPS服务，需要提供证书和私钥的路径
    // https: {
    //   key: '/path/to/server.key',
    //   cert: '/path/to/server.crt',
    // },
    // 跨源资源共享配置，允许所有源访问
    cors: false,
    // 配置代理，将 /api 开头的请求代理到 http://localhost:3001
    proxy: {
      "/api": {
        target: "http://127.0.0.1:18765/",
        changeOrigin: true,
        ws: false,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
      "/powerJob": {
        target: "http://127.0.0.1:7700/",
        changeOrigin: true,
        ws: false,
        rewrite: (path) => path.replace(/^\/powerJob/, ""),
      },
      
    },
    // 控制文件系统监视，忽略监视 node_modules 目录
    // watch: {
    //   ignored: '**/node_modules',
    // },

    // 当端口被占用时，不自动寻找下一个可用端口，而是直接报错
    strictPort: false,

    // 热模块替换，默认开启，可根据需要关闭
    hmr: true,
  },
});
